home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / doom / qplus10.zip / DEMON.QC < prev    next >
Text File  |  1996-07-31  |  11KB  |  384 lines

  1. /*
  2. ==============================================================================
  3.  
  4. DEMON
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd /raid/quake/id1/models/demon3
  10. $scale    0.8
  11. $origin 0 0 24
  12. $base base
  13. $skin base
  14.  
  15. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  16. $frame stand10 stand11 stand12 stand13
  17.  
  18. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8
  19.  
  20. $frame run1 run2 run3 run4 run5 run6
  21.  
  22. $frame leap1 leap2 leap3 leap4 leap5 leap6 leap7 leap8 leap9 leap10
  23. $frame leap11 leap12
  24.  
  25. $frame pain1 pain2 pain3 pain4 pain5 pain6
  26.  
  27. $frame death1 death2 death3 death4 death5 death6 death7 death8 death9
  28.  
  29. $frame attacka1 attacka2 attacka3 attacka4 attacka5 attacka6 attacka7 attacka8
  30. $frame attacka9 attacka10 attacka11 attacka12 attacka13 attacka14 attacka15
  31.  
  32. //============================================================================
  33.  
  34. void()    Demon_JumpTouch;
  35.  
  36. void()    demon1_stand1    =[    $stand1,    demon1_stand2    ] {ai_stand();};
  37. void()    demon1_stand2    =[    $stand2,    demon1_stand3    ] {ai_stand();};
  38. void()    demon1_stand3    =[    $stand3,    demon1_stand4    ] {ai_stand();};
  39. void()    demon1_stand4    =[    $stand4,    demon1_stand5    ] {ai_stand();};
  40. void()    demon1_stand5    =[    $stand5,    demon1_stand6    ] {ai_stand();};
  41. void()    demon1_stand6    =[    $stand6,    demon1_stand7    ] {ai_stand();};
  42. void()    demon1_stand7    =[    $stand7,    demon1_stand8    ] {ai_stand();};
  43. void()    demon1_stand8    =[    $stand8,    demon1_stand9    ] {ai_stand();};
  44. void()    demon1_stand9    =[    $stand9,    demon1_stand10    ] {ai_stand();};
  45. void()    demon1_stand10    =[    $stand10,    demon1_stand11    ] {ai_stand();};
  46. void()    demon1_stand11    =[    $stand11,    demon1_stand12    ] {ai_stand();};
  47. void()    demon1_stand12    =[    $stand12,    demon1_stand13    ] {ai_stand();};
  48. void()    demon1_stand13    =[    $stand13,    demon1_stand1    ] {ai_stand();};
  49.  
  50. void()    demon1_walk1    =[    $walk1,        demon1_walk2    ] {
  51. if (random() < 0.2)
  52.     sound (self, CHAN_VOICE, "demon/idle1.wav", 1, ATTN_IDLE);
  53. ai_walk(8);
  54. };
  55. void()    demon1_walk2    =[    $walk2,        demon1_walk3    ] {ai_walk(6);};
  56. void()    demon1_walk3    =[    $walk3,        demon1_walk4    ] {ai_walk(6);};
  57. void()    demon1_walk4    =[    $walk4,        demon1_walk5    ] {ai_walk(7);};
  58. void()    demon1_walk5    =[    $walk5,        demon1_walk6    ] {ai_walk(4);};
  59. void()    demon1_walk6    =[    $walk6,        demon1_walk7    ] {ai_walk(6);};
  60. void()    demon1_walk7    =[    $walk7,        demon1_walk8    ] {ai_walk(10);};
  61. void()    demon1_walk8    =[    $walk8,        demon1_walk1    ] {ai_walk(10);};
  62.  
  63. void()    demon1_run1    =[    $run1,        demon1_run2    ] {
  64. if (random() < 0.2)
  65.     sound (self, CHAN_VOICE, "demon/idle1.wav", 1, ATTN_IDLE);
  66. ai_run(20);};
  67. void()    demon1_run2    =[    $run2,        demon1_run3    ] {ai_run(15);};
  68. void()    demon1_run3    =[    $run3,        demon1_run4    ] {ai_run(36);};
  69. void()    demon1_run4    =[    $run4,        demon1_run5    ] {ai_run(20);};
  70. void()    demon1_run5    =[    $run5,        demon1_run6    ] {ai_run(15);};
  71. void()    demon1_run6    =[    $run6,        demon1_run1    ] {ai_run(36);};
  72.  
  73. void()    demon1_jump1    =[    $leap1,        demon1_jump2    ] {ai_face();};
  74. void()    demon1_jump2    =[    $leap2,        demon1_jump3    ] {ai_face();};
  75. void()    demon1_jump3    =[    $leap3,        demon1_jump4    ] {ai_face();};
  76. void()    demon1_jump4    =[    $leap4,        demon1_jump5    ]
  77. {
  78.     ai_face();
  79.     
  80.     self.touch = Demon_JumpTouch;
  81.     makevectors (self.angles);
  82.     self.origin_z = self.origin_z + 1;
  83.     self.velocity = v_forward * 600 + '0 0 250';
  84.     if (self.flags & FL_ONGROUND)
  85.         self.flags = self.flags - FL_ONGROUND;
  86. };
  87. void()    demon1_jump5    =[    $leap5,        demon1_jump6    ] {};
  88. void()    demon1_jump6    =[    $leap6,        demon1_jump7    ] {};
  89. void()    demon1_jump7    =[    $leap7,        demon1_jump8    ] {};
  90. void()    demon1_jump8    =[     $leap8,        demon1_jump9    ] {};
  91. void()    demon1_jump9    =[     $leap9,        demon1_jump10    ] {};
  92. void()    demon1_jump10    =[     $leap10,    demon1_jump1    ] {
  93. self.nextthink = time + 3;
  94. // if three seconds pass, assume demon is stuck and jump again
  95. };
  96.  
  97. void()    demon1_jump11    =[     $leap11,    demon1_jump12    ] {};
  98. void()    demon1_jump12    =[     $leap12,    demon1_run1    ] {};
  99.  
  100.  
  101. void()    demon1_atta1    =[    $attacka1,        demon1_atta2    ] {ai_charge(4);};
  102. void()    demon1_atta2    =[    $attacka2,        demon1_atta3    ] {ai_charge(0);};
  103. void()    demon1_atta3    =[    $attacka3,        demon1_atta4    ] {ai_charge(0);};
  104. void()    demon1_atta4    =[    $attacka4,        demon1_atta5    ] {ai_charge(1);};
  105. void()    demon1_atta5    =[    $attacka5,        demon1_atta6    ] {ai_charge(2); Demon_Melee(200);};
  106. void()    demon1_atta6    =[    $attacka6,        demon1_atta7    ] {ai_charge(1);};
  107. void()    demon1_atta7    =[    $attacka7,        demon1_atta8    ] {ai_charge(6);};
  108. void()    demon1_atta8    =[    $attacka8,        demon1_atta9    ] {ai_charge(8);};
  109. void()    demon1_atta9    =[    $attacka9,        demon1_atta10] {ai_charge(4);};
  110. void()    demon1_atta10    =[    $attacka10,        demon1_atta11] {ai_charge(2);};
  111. void()    demon1_atta11    =[    $attacka11,        demon1_atta12] {Demon_Melee(-200);};
  112. void()    demon1_atta12    =[    $attacka12,        demon1_atta13] {ai_charge(5);};
  113. void()    demon1_atta13    =[    $attacka13,        demon1_atta14] {ai_charge(8);};
  114. void()    demon1_atta14    =[    $attacka14,        demon1_atta15] {ai_charge(4);};
  115. void()    demon1_atta15    =[    $attacka15,        demon1_run1] {ai_charge(4);};
  116.  
  117. void()    demon1_pain1    =[    $pain1,        demon1_pain2    ] {};
  118. void()    demon1_pain2    =[    $pain2,        demon1_pain3    ] {};
  119. void()    demon1_pain3    =[    $pain3,        demon1_pain4    ] {};
  120. void()    demon1_pain4    =[    $pain4,        demon1_pain5    ] {};
  121. void()    demon1_pain5    =[    $pain5,        demon1_pain6    ] {};
  122. void()    demon1_pain6    =[    $pain6,        demon1_run1    ] {};
  123.  
  124. void(entity attacker, float damage)    demon1_pain =
  125. {
  126.     if (self.touch == Demon_JumpTouch)
  127.         return;
  128.  
  129.     if (self.pain_finished > time)
  130.         return;
  131.  
  132.     self.pain_finished = time + 1;
  133.     sound (self, CHAN_VOICE, "demon/dpain1.wav", 1, ATTN_NORM);
  134.  
  135.     if (random()*200 > damage)
  136.         return;        // didn't flinch
  137.         
  138.     demon1_pain1 ();
  139. };
  140.  
  141. void()    demon1_die1        =[    $death1,        demon1_die2    ] {
  142. sound (self, CHAN_VOICE, "demon/ddeath.wav", 1, ATTN_NORM);};
  143. void()    demon1_die2        =[    $death2,        demon1_die3    ] {};
  144. void()    demon1_die3        =[    $death3,        demon1_die4    ] {};
  145. void()    demon1_die4        =[    $death4,        demon1_die5    ] {};
  146. void()    demon1_die5        =[    $death5,        demon1_die6    ] {};
  147. void()    demon1_die6        =[    $death6,        demon1_die7    ]
  148. {};
  149. void()    demon1_die7        =[    $death7,        demon1_die8    ] {};
  150. void()    demon1_die8        =[    $death8,        demon1_die9    ] {};
  151. void()    demon1_die9        =[    $death9,        demon1_die9 ] {};
  152.  
  153. void() demon_really_die =
  154. {
  155.     if(self.flags & FL_MONSTER)
  156.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  157.     ThrowHead ("progs/h_demon.mdl", self.health);
  158.  ThrowGib ("progs/gib3.mdl", self.health*3);
  159.     ThrowGib ("progs/gib1.mdl", self.health*3);
  160.     ThrowGib ("progs/gib2.mdl", self.health*3);
  161.     ThrowGib ("progs/gib3.mdl", self.health*3);    ThrowGib ("progs/gib1.mdl", self.health*3);
  162.     ThrowGib ("progs/gib3.mdl", self.health*3);
  163.     ThrowGib ("progs/gib1.mdl", self.health*3);
  164. };
  165.  
  166. void() demon_die =
  167. {
  168. // check for gib
  169.     if (self.health < -80)
  170.     {
  171.         demon_really_die();
  172.         return;
  173.     }
  174.  
  175. // regular death
  176.     demon1_die1 ();
  177.         self.health=65;
  178.     setsize (self, '-16 -16 -24', '16 16 -12');
  179.     self.th_stand = SUB_Null;
  180.     self.th_walk = SUB_Null;
  181.     self.th_run = SUB_Null;
  182.         self.th_pain = SUB_Gib;
  183.     self.th_die = demon_really_die;
  184.     self.th_melee = SUB_Null;
  185.     self.th_missile = SUB_Null;
  186.     self.takedamage= DAMAGE_YES; // DAMAGE_AIM ?
  187.     self.flags = self.flags &! FL_MONSTER;
  188. };
  189.  
  190.  
  191. void() Demon_MeleeAttack =
  192. {
  193.     demon1_atta1 ();
  194. };
  195.  
  196.  
  197. /*QUAKED monster_demon1 (1 0 0) (-32 -32 -24) (32 32 64) Ambush
  198.  
  199. */
  200. void() monster_demon1 =
  201. {
  202.     if (deathmatch)
  203.     {
  204.         remove(self);
  205.         return;
  206.     }
  207.     precache_model ("progs/demon.mdl");
  208.     precache_model ("progs/h_demon.mdl");
  209.  
  210.     precache_sound ("demon/ddeath.wav");
  211.     precache_sound ("demon/dhit2.wav");
  212.     precache_sound ("demon/djump.wav");
  213.     precache_sound ("demon/dpain1.wav");
  214.     precache_sound ("demon/idle1.wav");
  215.     precache_sound ("demon/sight2.wav");
  216.  
  217.     self.solid = SOLID_SLIDEBOX;
  218.     self.movetype = MOVETYPE_STEP;
  219.  
  220.     setmodel (self, "progs/demon.mdl");
  221.  
  222.     setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  223.     self.health = 300;
  224.  
  225.     self.th_stand = demon1_stand1;
  226.     self.th_walk = demon1_walk1;
  227.     self.th_run = demon1_run1;
  228.     self.th_die = demon_die;
  229.     self.th_melee = Demon_MeleeAttack;        // one of two attacks
  230.     self.th_missile = demon1_jump1;            // jump attack
  231.     self.th_pain = demon1_pain;
  232.         
  233.     walkmonster_start();
  234. };
  235.  
  236.  
  237. /*
  238. ==============================================================================
  239.  
  240. DEMON
  241.  
  242. ==============================================================================
  243. */
  244.  
  245. /*
  246. ==============
  247. CheckDemonMelee
  248.  
  249. Returns TRUE if a melee attack would hit right now
  250. ==============
  251. */
  252. float()    CheckDemonMelee =
  253. {
  254.     i